クラスMainWindow
には、独自のヘッダーと他のメンバーを持つQWidgetTablesがいくつか含まれています。今のところ、私はかなり簡単なので、クラスMainWindow
の中にカスタムテーブルクラスを定義したいと思います。私はworkflow_table
のための行を追加し、削除するQPushButtonsを持ってUi::MainWindow
内Qt:QObjectクラス内で定義されたクラスのスロットを接続します。
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(SSHClient &client, QWidget *parent = 0);
public slots:
struct Workflow_Table {
QTableWidget* widget;
QStandardItemModel model;
QStringList headers;
void addRow(){}
void removeRow(){}
} workflow_table;
private:
SSHClient& client;
Ui::MainWindow* ui;
CTL ctl;
};
:以下の例を参照してください。このQPushButton::clicked
信号を MainWindow::Workflow_Table::addRow
に接続したいと思いますが、私は何の成功もせず、私が試していることが可能かどうかも分かりません。
MainWindow::MainWindow(SSHClient &client, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
client(client)
{
ui->setupUi(this);
//class CTL is a not a QObject class, yet std::bind causes it to act like a slot here. This statement compiles and runs fine.
connect(ui->button_load_ctl, &QPushButton::clicked, this, std::bind(&CTL::saveas, &ctl, "saved.ctl"));
//Error: 3 Arguments provided - 4 Expected. I'm almost certain this won't work.
connect(ui->button_add, &QPushButton::clicked, this, &MainWindow::Workflow_Table::addRow);
//Error: Not a signal or slot declaration. Not sure why this isn't working.
connect(ui->button_add, &QPushButton::clicked, this, std::bind(&MainWindow::Workflow_Table::addRow, &workflow_table));
//This doesn't work either. Error 1.
connect(ui->button_add, &QPushButton::clicked, this, std::bind(&Workflow_Table::addRow, &workflow_table));
}
それは私がメインウィンドウからQPushButton::clicked
信号に(Workflow_Table QObjectをせずに)MainWindow::Workflow_Table::addRow
を接続できることは可能ですか?
Workflow_Table
をQObjectにするのは簡単な解決策ですが、Workflow_Tableの関数はQObjectのスコープの下で定義されているため、接続できるかどうか不思議です。私はCTL::saveas
関数のようにstd :: bindを使って他の非スロット関数を接続することができましたので、ここで同様のことができると思います。私はまた、とpublic slots
アクセス指定子の下でWorkflow_Table
を移動しようとしましたが、いずれも動作していません。
最も簡単な方法は、 'のAddRow()')(onPushButton_clicked ''内部を置くことです。メタオブジェクトシステムを使用することは、単に行をクリックしたり追加したりするための非常に難しいことです。 – codekaizer