関数へのQtableWidget内のQPushButtonsのキャッチ/接続
-
13-12-2019 - |
質問
IM QTを使用してGUIを構築して、複数のファイルにあるデータの特定の列をプロットするのに役立つGUIを構築する。私が設定している機能を使用すると、ユーザーは各行のボタンを使用してファイルを選択できます。そのため、ボタンは最初にブラウズをクリックして、ユーザーをクリックしてダイアログを開くダイアログを開くと、ボタンテキストが選択されたファイル名に置き換えられます。物語のためにすみません。明確さを追加しようとする私の単純な試み。
私が持っている問題は、ボタンをクリックしたポリシーの設定方法がわからない。 QPushbuttonのそれぞれの機能を拡張しなければならないと思いますが、それを行う方法がわかりません。これまでのところ私は次のものを使ってセルウィジェットを設定しています。
//with row count set dimensions are set becasue column count is static
//begin bulding custom widgets/QTableWidgetItems into cells
for(int x = 0; x < ui->tableWidgetPlotLineList->rowCount(); x++)
{
for(int y = 0; y < ui->tableWidgetPlotLineList->columnCount(); y++)
{
if(y == 1)
{
//install button widget for file selection
QPushButton *fileButton = new QPushButton();
if(setDataStruct.plotLineListData.at(rowCount).lineFileName != "");
{
fileButton->setText(setDataStruct.plotLineListData.at(rowCount).lineFileName);
}
else
{
fileButton->setText("Browse...");
}
ui->tableWidgetPlotLineList->setCellWidget(x, y, fileButton);
}
.
私はそれを考えていました
connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));
.
トリックをするかもしれませんが、私はおそらくここで間違った方向になるだろうと思います。正直なところ、それがどこに行くのかに関しては確信があってもわからない...
私の投稿を読むためにそんなにありがとう。この投稿から欠けているものがあるかどうか私に知らせてください、そして私はすぐにそれを更新します。前もってこの投稿への貢献にも貢献したいです。
解決
connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));
.
信号/スロット接続に対して構文的に正しいが正しくない。このようなものがより適切になるでしょう:
connect(fileButton, SIGNAL(clicked()), this, SLOT(selectPlotLineFile(x));
.
...
Slotのemit
関数を使用するより一般的なclicked()
信号をsender()
信号にアクセスする必要がある場合:
void selectPlotLineFile() {
QPushButton *button = dynamic_cast<QPushButton*>( sender() )
}
.
今すぐあなたはどのような行を操作するかを知っているのか疑問に思うかもしれません。いくつかの異なるアプローチがあり、より簡単なものの1つは、どのボタンがどの行に属しているかを検索するために使用できるQMap<QPushButton*, int>
メンバ変数を維持することです。