我是qt的新手,我想知道如何制作動態選單。我確實得到了它來制作新的子選單,但我不知道如何實作這些動態制作的子選單的“觸發()功能”,以便我可以訪問如果我想點擊這樣一個新的子選單會發生什么。
到目前為止,我vector<QString> = vec;在 mainwindow.cpp 中的某些函式中擁有(使用:和一些名為“New_Window”的 .ui 視窗):
QMenu *menu = this->menuBar()->addMenu("Chat Members");
for (int i = 0; i < vec.size(); i){
QString name = vec.at(i);
QAction *act = menu->addAction(name);
New_Window* new_window = new New_Window;
QObject::connect(act,SIGNAL(triggered()),
new_window,SLOT(actionReaction()));
}
uj5u.com熱心網友回復:
這是一個帶有動態介面的信號槽如何作業的例子,它
class A是在啟動程式后創建的,然后用戶點擊一個按鈕class A,例如,aclass A被創建了很多次,我們需要確定從哪個物件我們得到一個signal按下按鈕,所以
class A : public QMainWindow
{
Q_OBJECT
public:
A(QWidget *parent = nullptr);
~A();
void setID(const int id);
void getId() const;
signals:
void onButtonPress(int ID);
private:
int mID;
};
在這里,我們創建一個新的class A并vector以這種方式存盤它,
QVector<A*> mCreatingClassA;
void createNewClassA
{
QVector<A*> mCreatingClassA;
....
A* a = new A();
int id = // create your unique ID
a->setId(id);
connect(a,SIGNAL(onButtonPress(int)),this,SLOT(onyourSlot(int)));
mCreatingClassA.push_back(a);
....
}
檢測從中signal接收到的物件)
void onyourSlot(int ID)
{
for (int i = 0; i < mCreatingClassA.size(); i) {
if(mCreatingClassA[i]->getId()==ID)
{
mCreatingClassA[i] // received a signal from this object
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/345120.html
