2016-06-21 3 views
0

私のフォームには8つのボタンがあります(btn1、btn2、btn3、...、btn8)。各ボタンのテキストはデータベースからのものです。私は自分のデータベースに8つの関数を定義します。これらは私のフィールドです:Qtでどのボタンがクリックされたかを知るには?

ID, Text, Active 

ユーザーが各ボタンを押すと、データベースに関数名を保存する必要があります。最初は、すべてのボタンが非表示になっています。ページの読み込みでは、データベースからデータを読み込んで、機能ボタンのテキストを表示します。機能ボタンがアクティブでない場合、ボタンも不可視です。私は、リスト内のすべてのアクティブ機能を保存し、リスト・カウントを取得し、そのコードで

ui->btn1->hide(); 
ui->btn2->hide(); 
ui->btn3->hide(); 
ui->btn4->hide(); 
ui->btn5->hide(); 
ui->btn6->hide(); 
ui->btn7->hide(); 
ui->btn8->hide(); 
QSqlQueryModel *lst=database->getFunctions(); 
QString st; 

QStringList btnlst; 
for(int i = 0; i < lst->rowCount(); ++i) 
{ 
    if(lst->record(i).value(2).toInt()==1)//ACTIVE 
    { 
     btnlst<<(lst->record(i).value(3).toString());//text 
    } 
} 
for(int i = 0; i < btnlst.count(); ++i) 
{ 
    QPushButton *btn=this->findChild<QPushButton>(st.append(QString::number(i))); 
    btn->setText(btnlst[i]); 
    btn->show(); 
    connect(btn,SIGNAL(clicked()),this,SLOT(Function())); 
} 

は、これは私のコードです。たとえば、リストの長さが3の場合、btn1,btn2およびbtn3が自分のフォームに表示され、他のものは非表示にしてください。次に、すべてのボタンclicked()Function()というスロットに接続します。

私のフォームでユーザーが押したボタンのテキストを使用したいと思います。 どのボタンがクリックされたか、どのようにこのボタンのテキストを取得するかを見つける方法?あなたのスロットFunction()

+0

、 「QSignalMapper」http://doc.qt.io/qt-5/qsignalmapper.htmlが役に立つかもしれません – Felix

答えて

2

、ちょうどあなたがQObject::sender()のおかげでクリックしたボタンを取得し、その後、あなたはQAbstractButton::text()とそのボタンのテキストを取得することができます:あなたが関数で何をする必要があるかに応じて、

void yourClass::Function() 
{ 
    QPushButton* buttonSender = qobject_cast<QPushButton*>(sender()); // retrieve the button you have clicked 
    QString buttonText = buttonSender->text(); // retrive the text from the button clicked 
} 
+0

返信ありがとうございますが、私はそれを使用しました。このエラーが表示されます:オーバーロードされた関数 'qobject_cast'を型変換に基づいて解決できません'QPushButton *' QPushButton * buttonSender = qobject_cast sender(); – MHM

+1

@MHMが編集されました。 'sender()'の前後に2つの括弧がない – IAmInPLS

関連する問題