0

Qt を使用して GUI を構築し、ユーザーが複数のファイルにあるデータの特定の列をプロットできるようにする学生開発者です。私が設定している機能により、ユーザーは各行のボタンを使用してファイルを選択できます。そのため、ボタンはもともと参照と表示され、ユーザーがそれをクリックしてダイアログを開いてファイルを選択すると、ボタンのテキストが選択したファイル名に置き換えられます。話が逸れました。明確にするための私の簡単な試み。

私が抱えている問題は、クリックされたボタンのポリシーを設定する方法がわからないことです。各 QPushButtons の機能を拡張する必要があると思いますが、その方法がよくわかりません。これまでのところ、次を使用してセルウィジェットを設定しています。

//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));

トリックを行うかもしれませんが、おそらくここで間違った方向に進んでいると思います。正直なところ、それがどこに行くのかについてはあまり確信が持てません...

私の投稿を読んでくれてありがとう。この投稿に欠けているものがある場合はお知らせください。すぐに更新します。また、事前にこの投稿への貢献に感謝したいと思います!

4

1 に答える 1

2
connect(ui->tableWidgetPlotLineList->row(x), SIGNAL(fileButton->clicked()), this, SLOT(selectPlotLineFile(x));

シグナル/スロット接続の構文が正しくありません。次のようなものがより適切です。

connect(fileButton, SIGNAL(clicked()), this, SLOT(selectPlotLineFile(x));

...

スロットで関数を使用するよりも信号をemit編集した特定のボタンにアクセスする必要がある場合:clicked()sender()

void selectPlotLineFile() {
    QPushButton *button = dynamic_cast<QPushButton*>( sender() )
}

ここで、操作対象の行をどのように判断するのか疑問に思うかもしれません。いくつかの異なるアプローチがありますが、より簡単な方法の 1 つは、QMap<QPushButton*, int>どのボタンがどの行に属しているかを調べるために使用できるメンバー変数を維持することです。

于 2012-07-29T18:58:14.730 に答える