Я создал виджет qt для своего проекта. Кнопка, сигнал и слот, поток все работает должным образом, и я взял вывод.
dialog.h
public slots:
void startThread();
void stopThread();
};
#endif // DIALOG_H
dialog.cpp
void Dialog:: startThread(){
if(!startThreadflag){
this->ui->Start_2->setEnabled(false);
this->ui-> Stop_2->setEnabled(true);
startThreadflag = true;
stopThreadflag = false;
}
}
void Dialog:: stopThread(){
if(!stopThreadflag){
cout << "Closing threads"<< endl;
this->ui->Start_2->setEnabled(true);
this->ui->Stop_2->setEnabled(false);
stopThreadflag= true;
startThreadflag = false;
}
}
void Dialog::on_Close_clicked()
{
cout<<"close_clicked"<<endl;
this->close();
}
Для создания панели инструментов я разработал такой же интерфейс в qml, сигнал и слот все, что связано, когда я нажимаю кнопку сигнала и слот подключен. Но я не знаю, как подключить кнопку метки, установите включен.
это код виджета QT. ниже этого dialog.cpp и qml
dialog.cpp
void Dialog::startThread()
{
cout<<"Start Clicked"<<endl;
emit startbuttonclicked();
}
void Dialog::stopThread()
{
cout<<"Stop Clicked"<<endl;
emit stopbuttonclicked();
}
dashboard.qml: (как и все кнопки одинаковые)
Item {
Dialog {
id: dialog1;
}
Button {
x:220
y:295
text: "Start"onClicked: { dialog1.startThread() }
}
}
Указывает тип переменной, которую возвращает функция
main () должен возвращать целое число
Нет масштабирования до создания экземпляра QApplication.
QGuiApplication app(argc, argv);
QFontDatabase::addApplicationFont(":/fonts/DejaVuSans.ttf");
app.setFont(QFont("DejaVu Sans"));
// Now I am using Dialog like context property in qml
// qmlRegisterType<Dialog>("CustomExtensions",1,0,"Dialog");
Dialog dlg;
QQmlApplicationEngine engine;
// Now in qml we can access to dlg by "dialogObj" name
engine.rootContext()->setContextProperty("dialogObj", &dlg);
engine.load(QUrl(QStringLiteral("qrc:/qml/dashboard.qml")));
//QQmlApplicationEngine engine(QUrl("qrc:/qml/dashboard.qml")); ``
Используя это, вы можете получить доступ к сигналу Qt и слоту с помощью qml.
Создайте функцию в своем файле QML, чтобы включить / отключить ярлык
function enableStart_2(enable)
{
Start_2.enabled = enable;
}
Затем вам нужно подключить ваш сигнал Qt к слоту QML, например, (соединитель наследует QObject
)
QObject::connect(&connector, SIGNAL(enableStart_2(QVariant)), window, SLOT(enableStart_2(QVariant)));
Это то, как вы излучаете сигнал в свой слот QML
emit enableStart_2(true);
ОБНОВИТЬ
Как пример: ваш
onClicked: { dialog1.startThread() }
должно быть что-то вроде
onClicked: { startThread() }
с startThread()
будучи сигналом QML, определенным в вашем файле QML, как signal startThread()
,
Вам нужно подключить ваш сигнал QML к слоту в вашем коде C ++:
QObject::connect(window, SIGNAL(startThread()), &foo, SLOT(onStartThread()));
Теперь вам нужно определить слот внутри вашего класса Foo:
class Foo : public QObject
{
Q_OBJECT
public slots:
void onStartThread(void);
};
В определении функции onStartThread
Вы начинаете свою тему.
Я нашел решение для этого. используя его можно включить конкретную кнопку.
Connections {
target:dialogObj
onStart_2EnabledChanged: {
startBtn.enabled = state
}
onStop_2EnabledChanged: {
stopBtn.enabled = state
}
}