2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Qt menu
Сообщение15.11.2009, 20:40 
Подскажите, как в Qt изменить названия меню, например было Файл сделать File

 
 
 
 Re: Qt menu
Сообщение15.11.2009, 20:54 
Если Вы создаете форму с использованием Qt Designer, то нужно просто щелкнуть по названию меню и откроется режим редактирования надписи. Если же Вы подразумеваете программный путь, то см. пример Menus и его описание в Assistant'е (там наглядно и подробно описано).

 
 
 
 Re: Qt menu
Сообщение15.11.2009, 21:12 
Второй вариант, вообще мне надо языви менять, чтобы выбрал русский русский выбрал english english
Я там столько уже глянул, мне просто функция нужна, это ж ведь как то так должно быть mymenu->titleChange("File");
но не нахожу

 
 
 
 Re: Qt menu
Сообщение15.11.2009, 21:33 
После того, как Вы создали меню с помощью addMenu() и запомнили указатель на созданное, можно воспользоваться функцией setTitle():
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
class MyMainWindow : public QMainWindow
{
//...
QMenu* fileMenu;
//...
};

//...

MyMainWindow::SomeFunction //какая-то функция
{
    fileMenu = menuBar()->addMenu("File");
}

MyMainWindow::OtherFunction //другая функция
{
    fileMenu->setTitle("Файл");
}
 

 
 
 
 Re: Qt menu
Сообщение15.11.2009, 21:43 
Огромнейшее спасибо EtCetera, вы мне уже у какой раз помагаете, сколько вы всего знаете )))
Спасибо

-- Вс ноя 15, 2009 22:48:57 --

Вот только ещё один вопрос а список меню как у него поменять имя ?
Код:
exitAct = new QAction(QIcon("quit.png"),"Закрыть", this);
    connect(exitAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows()));


-- Вс ноя 15, 2009 23:22:57 --

Сам разобрался вот так надо

Код:
exitAct->setText("Закрыть");

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 00:05 
А вот из этого сделать массив , подскажите пожалуйста

Код:
QRectF target(80.0, 50.0, 50.0, 50.0);
QRectF source(0.0, 0.0, 251.0, 241.0);
QImage image("arshavin.gif");
painter.drawImage(target, image, source);



т.е. должно получится как то вот так
Код:
QRectF target[5];
QRectF source(0.0, 0.0, 251.0, 241.0);
QImage image("arshavin.gif");
target[0].getCoord(80.0, 50.0, 50.0, 50.0);
target[1].getCoord(другие координаты);
target[2].getCoord(другие координаты);
target[3].getCoord(другие координаты);
target[4].getCoord(другие координаты);
for(int i=0;i<5;i++)
painter.drawImage(target[i], image, source);

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 00:28 
А разве там нету каких-то более специальных и умных средств именно для локализации?

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 10:08 
mycoding
А что Вас не устраивает в приведенном Вами коде? Вроде бы все правильно (если Вы хотели именно этого: нарисовать одну и ту же картинку несколько раз по нескольким разным координатам). Только лучше (в смысле, несколько цивилизованнее) пользоваться не массивами, а списками.

AD
AD в сообщении #262455 писал(а):
А разве там нету каких-то более специальных и умных средств именно для локализации?
Есть. Связка функции QObject::tr() (для всех строковых констант в коде программы) и утилиты Qt Linguist (а также соблюдение еще нескольких этапов, чтобы все "блестело"). Эту же связку можно применять для более "продвинутых" случаев локализации, когда требуется не просто дословный перевод, а еще и учет падежей, чисел (единственное/множественное), родов, стилей записи дат и пр. (по крайней мере, функционал для таких вещей заложен). Впрочем, ничто не мешает использовать этот механизм даже для таких простых случаев. Так или иначе, всех интересующихся отсылаю к обзору Internationalization with Qt.

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 14:21 
Всё работает
вот код
Код:
QRectF target[5];
target[0].setRect(60.0, 100.0, 50.0, 50.0);
target[1].setRect(290.0, 100.0, 50.0, 50.0);
target[2].setRect(80.0, 300.0, 50.0, 50.0);
target[3].setRect(270.0, 300.0, 50.0, 50.0);
target[4].setRect(180.0, 40.0, 50.0, 50.0);
QRectF source(0.0, 0.0, 251.0, 241.0);
QImage image("arshavin.gif");
for(int i=0;i<5;i++)
painter.drawImage(target[i], image, source);

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 21:49 
Подскажите а как текст ещё вывести в paintevent,
а то какие то глюки.

-- Пн ноя 16, 2009 22:59:29 --

Так с этим разобрался, но вот не получается вывести числа
т.е. надо
Код:
painter.drawText(100,100, (char*)phils[0].eat);

Но так не работает , т.е. phils[100].eat==100 и надо это вывести
Пождскажите

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 22:12 
mycoding
Четче напишите, что именно надо вывести, пожалуйста. А то пока ничего непонятно.

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 22:15 
ВОт на всякий случай полностью пишу код paintevent
Код:
void MainWindow::paintEvent(QPaintEvent *event)
{

  QPainter painter(this);

  painter.setRenderHint(QPainter::Antialiasing);
  painter.setPen(QPen(QBrush("#575555"), 1));
/*
  painter.drawEllipse(100, 100, 300, 300);

  painter.drawEllipse(180, 110, 220, 150);
  painter.drawEllipse(130, 150, 170, 190);
  painter.drawEllipse(230, 150, 270, 190);
  painter.drawEllipse(130, 220, 170, 260);
  painter.drawEllipse(230, 220, 270, 260);
  painter.drawEllipse(180, 50, 220, 90);
  painter.drawEllipse(70, 100, 110, 140);
  painter.drawEllipse(70, 260, 110, 300);
  painter.drawEllipse(300, 120, 340, 160);
  painter.drawEllipse(300, 260, 340, 300);
*/
painter.drawEllipse(100, 100, 200, 200);

QRectF target[5];
target[0].setRect(60.0, 100.0, 50.0, 50.0);
target[1].setRect(290.0, 100.0, 50.0, 50.0);
target[2].setRect(80.0, 300.0, 50.0, 50.0);
target[3].setRect(270.0, 300.0, 50.0, 50.0);
target[4].setRect(180.0, 40.0, 50.0, 50.0);
QRectF source(0.0, 0.0, 251.0, 241.0);
QImage image("arshavin.gif");
for(int i=0;i<5;i++)
painter.drawImage(target[i], image, source);
//str=itoa(i, str, 10);
char my[3];
snprintf(my,3,"%d",phils[0].eat);
//itoa(phils[0].eat,my,10);
painter.drawText(100,100, my);
//painter.drawText(100,100, (char*)phils[0].eat);

  QString text = "Потоки";

  painter.setPen(QPen(QBrush("#575555"), 1));

  QFont font("Courier", x, QFont::Courier);
  QFontMetrics fm(font);
  int textWidth = fm.width(text);

  painter.setFont(font);


  if (x > 10) {
    opacity -= 0.01;
    painter.setOpacity(opacity);
  }

  if (opacity <= 0) {
    killTimer(timerId);
    std::cout << "timer stopped" << std::endl;
  }

  int h = height();
  int w = width();

  painter.translate(QPoint(w/2, h/2));
  painter.drawText(-textWidth/2, 0, text);

}



Вот а надо просто вывести как текст ну или как получится цифры из массива вот в этом paintevent-e

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 22:31 
mycoding
Воспользуйтесь статической функцией QString::number().

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 22:50 
А можете ещё в потоками подсказать.
Как это на Qt сделать мне бы простенький примерчик,
типа есть число 100 и 5 потоков его уменьшают, и как только один из число меньше 50 отсановить все потоки

 
 
 
 Re: Qt menu
Сообщение16.11.2009, 23:03 
mycoding
Чтобы такие программки писать, надо немножечко теоретическую базу подтянуть по поводу мьютексов, семафоров, событий и пр., иначе будет ужас (даже в этом простом примерчике).
Но вообще, есть класс QThread и в нем метод terminate(), который товарищи из Qt крайне не рекомендуют применять. Соответственно, лучше поступить по-другому, благо вариантов решения задачи предостаточно.

 
 
 [ Сообщений: 24 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group