Russian Qt Forum

Qt => Общие вопросы => Тема начата: Noize_programmer от Январь 20, 2023, 17:59



Название: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 20, 2023, 17:59
                                                                                             решено

как вы поняли из названия у меня не работают слоты в menu->addAction();
сам проект работает но не работает ни один слот кроме SChangeWindowTitle(const QString&)

помогите пожалйста

(весь проект в .zip)

main_notepad.h:
Код:
        QMenu*   pmuFile = new QMenu("&File");
        QMenu*   pmuHelp = new QMenu("&Help");
        notepad* pnotepad = new notepad;

        pmuFile->addAction("&Open",
                           pnotepad,
                           SLOT(SLoad()),
                           QKeySequence("CTRL+O")
                           );
        pmuFile->addAction("&Save",
                           pnotepad,
                           SLOT(SSave()),
                           QKeySequence("CTRL+S")
                           );
        pmuFile->addAction("&Save As",
                           pnotepad,
                           SLOT(SLoad()),
                           QKeySequence("CTRL+SHIFT+S")
                           );
        pmuFile->addSeparator();

        pmuFile->addAction("&Quit",
                           qApp,
                           SLOT(Quit()),
                           QKeySequence("CTRL+Q")
                           );
        pmuFile->addAction("&About",
                           this,
                           SLOT(SAbout()),
                           Qt::Key_F1
                           );


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: kambala от Январь 20, 2023, 18:42
на будущее:
- папку build прикладывать не надо
- файлы с расширением user тоже
- проще выкладывать код на гитхаб, чем в архиве — тогда можно его сразу прочитать в браузере

почему приложенный код не содержит исправлений из другой темы? это банальное неуважение. более того, даже после внесения тех исправлений он не компилируется. также твои слоты подключаются в классе main_notepad, но в main ты почему-то создаешь объект класса notepad.

перенос кода конструктора main_notepad в cpp файл по волшебству все исправил, даже не особо понимаю почему не работало когда он был в заголовочном файле. а для сигнала changeWindowTitle правильно писать SIGNAL(changeWindowTitle(QString)) — надо указывать все параметры сигнала.


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 21, 2023, 10:29
ой извените я вложил старый код
код с изменениями в .zip

Цитировать
также твои слоты подключаются в классе main_notepad, но в main ты почему-то создаешь объект класса notepad.
потому что я в main_notepad.h интерпретирую .h класа notepad_window и подключение слотов идёт в main_notepad.h

Цитировать
перенос кода конструктора main_notepad в cpp файл по волшебству все исправил
я попытался но выдало ошибку в которой говорится что коструктор is Defolt


kambala спасибо огромное за отзывчивость вы как-то да поможете каждый раз как я создал новую тему


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: kambala от Январь 21, 2023, 12:17
я уже не стал смотреть твой обновленный архив, сразу выкладываю свою исправленную версию. можешь сам сравнить файлы и посмотреть отличия.

я тебе еще в SLoad() исправил чтение файла — должно быть QIODevice::ReadOnly вместо QIODevice::WriteOnly.

P.S. пиши реализацию методов в cpp файлах, а не в h, даже если в книге пишут в h (за исключением шаблонных функций/методов): лучше сразу приучаться к хорошему стилю. потом, когда освоишься с С++, узнаешь в каких случаях «допустимо» писать в h.


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 21, 2023, 12:52
я уже не стал смотреть твой обновленный архив, сразу выкладываю свою исправленную версию. можешь сам сравнить файлы и посмотреть отличия.

спасибо
 я сделал как вы сказалии всё за работало но когда открываю txt файл на руском получается билеберда


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: kambala от Январь 21, 2023, 13:01
в местах, где ты работаешь с объектом QTextStream, надо указать необходимую кодировку до начала чтения/записи, например:
Код
C++ (Qt)
stream.setCodec("UTF-8");


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 21, 2023, 13:15
И подскажите пожалуйста как реализовать кнопку Help в меню?  ??? ??? ??? ??? ???


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: kambala от Январь 21, 2023, 14:55
повесь About экшн на pmuHelp вместо pmuFile, если я правильно понял твое желание


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 22, 2023, 10:24
повесь About экшн на pmuHelp вместо pmuFile, если я правильно понял твое желание

спасибо за ответ но нет мне нужна реализация class HelpBrowser

я её уже делал но тот проект я "утратил"(проект был ны windows 10 а сечас у меня windows 11)
как реализировать я подзабыл


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: kambala от Январь 22, 2023, 11:00
этого файла нет в архиве. все еще непонятно какое поведение ты хочешь. напиши пошагово: куда надо нажимать, что должно открыться и т.д.


Название: Re: не роботают слоты(menu->addAction();)
Отправлено: Noize_programmer от Январь 23, 2023, 12:09
этого файла нет в архиве. все еще непонятно какое поведение ты хочешь. напиши пошагово: куда надо нажимать, что должно открыться и т.д.

спасибо за ответы но я уже сделал с помощью QMessageBox::about(...) и готовая програма у меня на GitHub

Git: https://github.com/SpeechKingV  название costumNotePad