Qt: использовать указатель пользовательского интерфейса в отдельной функции

0

Я хотел бы изменить GUI ui, используя отдельную функцию, когда действие происходит.

Например: вот мой код для щелчка элемента меню:

void MainWindow::on_actionImperial_triggered()
{
    ui->actionMetric->setChecked(false);
    ui->z_unit_label->setText("inches");
    void gui_change();
}

Я хотел бы gui_change() функцию gui_change() и изменить ui.

void gui_change()
{
    ui->pushButton_2->setStyleSheet("color:grey");
    ui->pushButton->setStyleSheet("color:green");
}

Это приводит к ошибке use of undeclared identifier 'ui', являющегося новым для Qt, я потратил несколько часов на поиск в Google и поиск в Stack, чтобы определить, как заставить ui находиться в рамках функции, но не удалось.

Теги:
scope
pointers
qt
qt5

1 ответ

2
Лучший ответ

Вам нужно сделать gui_change() функцию-член MainWindow, а затем объявить ее как void MainWindow::gui_change().

Если вы просто напишите void gui_change(), то это автономная функция, которая не является частью какого-либо класса или пространства имен. (Кстати, это вопрос C++, а не вопрос Qt)

  • 0
    Я попытался сделать его функцией-членом в mainwindow.h под public: затем public slots: затем private: затем private slots: и это позволяет приложению компилироваться и запускаться, но функция не работает. Есть идеи, почему это будет? Если я перемещу код из функции в строку, где вызывается функция, она работает нормально.
  • 1
    @JimmyBanks Но вы сделали это функцией-членом в вашем mainwindow.cpp ? Вместо того, чтобы объявлять его как void gui_change() , объявите его как void MainWindow::gui_change() . Также не называйте это так: void gui_change(); в вашей функции MainWindow::on_actionImperial_triggered() . Просто назовите это так: gui_change(); ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню