Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > всплывающее меню на кнопке


Автор: gordmiand 7.4.2010, 19:34
создаю менюшку на кнопке:
Код

QString menus[5]={“привет”,”всем”,”знатокам”,”библиотеки”,”Qt”};
 QMenu *My_menu = new QMenu();
        QActionGroup* grMenus = new QActionGroup(this);
        for (int i = 0; i <5; ++i)
        {
            QAction* act = My_menu->addAction(menus[i]);
          //  act->setData(menus[i]);
            grMenus->addAction(act);
        } 
Button->setMenu(My_menu);

вместо текста - иероглифы.....как исправить???
А как мне в начале проставить галочки сразу для всех 5 пунктов менюшки и как программно узнать номер выбранного пункта меню?
Код

connect(grMenus, SIGNAL(   ???   ), this, SLOT(ChooseMenu(QAction*)));
...
void Klass::ChooseMenu(QAction* N_menu)
{
      // по номеру выбранного пункта меню +его checked/!checked  выполнять различные действия 
}

Автор: borisbn 7.4.2010, 21:39
столько вопросов ...

1. чтобы отображались русские буквы вставь в функции main
Код
QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "Windows-1251" ) );

2. 
Цитата(gordmiand @  7.4.2010,  19:34 Найти цитируемый пост)
А как мне в начале проставить галочки сразу для всех 5 

Код

QAction* act = My_menu->addAction(menus[i]);
act->setChecked( true );

3. 
Цитата(gordmiand @  7.4.2010,  19:34 Найти цитируемый пост)
как программно узнать номер выбранного пункта меню?

Код

QAction* act = My_menu->addAction( menus[ i ], this, SLOT( onMenuItemClicked() ) );
act->setData( i );
...
void Klass::onMenuItemClicked()
{
    QAction * act = (QAction *)sender();
    int menuIdx = act->data();
// menuIdx - номер выбранного пункта меню
}


Автор: djamshud 8.4.2010, 00:20
>QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "Windows-1251" ) );

Если быть точнее, тут нужно указать кодировку, в которой написан исходник.

Автор: gordmiand 8.4.2010, 05:30
а как узнать "кодировку, в которой написан исходник"?

Автор: borisbn 8.4.2010, 06:22
djamshud, Да, конечно. Просто скопировал со своего шаблона main.cpp (кодю только под win)

gordmiand, а в чём ты создавал исходник? Кстати можно его открыть браузером, добиться переключением кодировок правильного отображения текста и - вуаля smile

Автор: djamshud 8.4.2010, 11:05
А что, текстовые редакторы уже не поддерживают переключения/изменения кодировок?:)

Если пишите под Windows, то скорее всего вышеуказанная кодировка именно для вас.

Автор: gordmiand 8.4.2010, 19:49
djamshud: спасибо за ответ: 
Если выводимый массив QString  menus[5] описан здесь же в cpp-шнике (то есть там же, где я его и использую - как в моем примере выше), то все выводится по-русски, а если я этот массив определяю в другом файле (хидере) и сюда его подключаю – опять иероглифы…как мне теперь это исправить?

Автор: gordmiand 9.4.2010, 19:40
Почему, допустим, так (см. ниже) не работает (все равно иероглифы проклятые, так же как и при ROMAN8, UTF-8, UTF-16, KOI8-R - кодировках…) – как исправить на русский текст?
Код

QString stroka="прeвед";
    QTextCodec * codec = QTextCodec::codecForName("Windows-1251");
    QString tmp = codec->fromUnicode(stroka);
         ui->lineEdit->setText(tmp);

Автор: gordmiand 10.4.2010, 13:38
подскажите пож-та как выводить русские символы, если выводимый русскоязычный массив описан в отдельном хидере - указанный выше код в main.cpp уже не помогает... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)