1651
|
Qt / Вопросы новичков / Проблемы с компиляцией гуи плагина
|
: Декабрь 08, 2012, 07:14
|
Здравствуйте! Скиньте пожалуйста какой нибудь мини пример проекта с гуи плагином, например кнопка, нажатие которой показывает сообщение, или label с определенным текстом Спасибо!
|
|
|
1652
|
Qt / Кладовая готовых решений / Re: Выбор цвета с помощью кнопки и контекстного меню
|
: Ноябрь 14, 2012, 23:27
|
Делается за полдня с отладкой. , с отдачей цвета в Role. Ну и расположение итемов выставить в IconView не, ходил таким путем - там глюки были, преодолеть не смог. так что там не "ComboBox Обычный, c listView". А слабо исходный код этого монстра выложить? тынцПросил код, а дали ссылку на целый проект (в котором не хочется разбираться и искать злополучный тот код ) В институте на 3 курсе, делал похожий проект
|
|
|
1655
|
Qt / Кладовая готовых решений / Re: Выбор цвета с помощью кнопки и контекстного меню
|
: Ноябрь 13, 2012, 18:04
|
Изначально этот класс не был предназначен только для стандартных цветов, я конечно мог создать что то типа QMenu *menuColor = new QMenu(); QPixmap pixmap(10, 10);
for(int i = Qt::black; i < Qt::darkYellow; i++) { QAction *actionColor = new QAction(this); pixmap.fill(i); actionColor->setIcon(pixmap); menu->addAction(actionColor); }
И ура обошлись несколькими строчками! Вот только текста не будет но и тут без проблем: создаем массив (или контейнер std и qt в помощь) и в него вгоняем текст action'ов А если еще помучиться, то можно код по другому оформить: создать структуру с полями текст и цвет, или просто 2 массива/контейнера (цвет и текст), в них вгоняем нужные данные, а при их обработке создаем объект QAction, добавляем его в QMenu, и обязательно не забывать цвет в data QAction добавлять и коннектить к чему то, а потом не менее хитрым способом определять объект вызвавший сигнал и доставать из его data цвет Я не стал извращаться и выбрал самый простой способ, который хоть и выглядит громоздким из-за реализации "в лоб", но более быстродейственен, без всяких наработок Да и по коду не сложно понять что делает он PS. В то время нужно было сделать что то подобное по функционалу и быстро (главное чтобы работало ) PPS. Кому надо - доработает
|
|
|
1656
|
Qt / Кладовая готовых решений / Выбор цвета с помощью кнопки и контекстного меню
|
: Ноябрь 13, 2012, 17:28
|
Здравствуйте! Хочу поделиться с собственной наработкой Кнопка - кнопкою, при нажатии который справо появляется контексное меню с выбором стандартных цветов Qt, и возможность вызвать диалог выбора цвета (для привередливых ) Не думаю что пример тут нужен, класс простой, просто коннектите сигнал selectedColor(QColor), к нужному слоту или (о мой бог!) сигналу и радуетесь Для новичков 1 уровня познания приведу пример: UPushButtonSelectColor *pButtonSelectColor = new UPushButtonSelectColor("Get color!");
connect(UPushButtonSelectColor, SIGNAL(selectedColor(QColor)), [ваш_объект], [слот_или_сигнал_вашего_объекта]);
Ниже реализация, для тех кому лень качать, или не доверяют источнику (а вдруг вирусня!) *.h файл: #ifndef UPUSHBUTTONSELECTCOLOR_H #define UPUSHBUTTONSELECTCOLOR_H
#include <QPushButton> #include <QMenu> #include <QAction> #include <QColorDialog>
class UPushButtonSelectColor: public QPushButton { Q_OBJECT
public: UPushButtonSelectColor(QWidget *parent = 0); UPushButtonSelectColor(const QString &text, QWidget *parent = 0); UPushButtonSelectColor(const QIcon &icon, const QString &text, QWidget *parent = 0); QMenu * menuColors(); QList <QAction *> actionsColors();
private: void init(); void createActionsSelectColor(); void setLanguage();
private: QMenu *popurMenuTextColor; QAction *actionTextColor_White; QAction *actionTextColor_Black; QAction *actionTextColor_Red; QAction *actionTextColor_DarkRed; QAction *actionTextColor_Green; QAction *actionTextColor_DarkGreen; QAction *actionTextColor_Blue; QAction *actionTextColor_DarkBlue; QAction *actionTextColor_Cyan; QAction *actionTextColor_DarkCyan; QAction *actionTextColor_Magenta; QAction *actionTextColor_DarkMagenta; QAction *actionTextColor_Yellow; QAction *actionTextColor_DarkYellow; QAction *actionTextColor_Gray; QAction *actionTextColor_DarkGray; QAction *actionTextColor_LightGray; QAction *actionTextColor_Other;
QColor color;
public slots: void black(); void white(); void gray(); void red(); void green(); void cyan(); void blue(); void magenta(); void yellow(); void darkGray(); void darkRed(); void darkGreen(); void darkCyan(); void darkBlue(); void darkMagenta(); void darkYellow();
void lightGray();
void colorDialog();
void setColor(QColor c);
private slots: void showMenu();
signals: void selectedColor(QColor); };
#endif // UPUSHBUTTONSELECTCOLOR_H
*.cpp файл: #include "UPushButtonSelectColor.h"
UPushButtonSelectColor::UPushButtonSelectColor(QWidget *parent): QPushButton(parent) { init(); } UPushButtonSelectColor::UPushButtonSelectColor(const QString &text, QWidget *parent): QPushButton(text, parent) { init(); } UPushButtonSelectColor::UPushButtonSelectColor(const QIcon &icon, const QString &text, QWidget *parent): QPushButton(icon, text, parent) { init(); }
QMenu * UPushButtonSelectColor::menuColors() { return popurMenuTextColor; } QList <QAction *> UPushButtonSelectColor::actionsColors() { return popurMenuTextColor->actions(); }
// PRIVATE void UPushButtonSelectColor::init() { createActionsSelectColor(); setLanguage(); connect(this, SIGNAL(clicked()), this, SLOT(showMenu())); } void UPushButtonSelectColor::createActionsSelectColor() { actionTextColor_White = new QAction(this); actionTextColor_Black = new QAction(this); actionTextColor_Red = new QAction(this); actionTextColor_DarkRed = new QAction(this); actionTextColor_Green = new QAction(this); actionTextColor_DarkGreen = new QAction(this); actionTextColor_Blue = new QAction(this); actionTextColor_DarkBlue = new QAction(this); actionTextColor_Cyan = new QAction(this); actionTextColor_DarkCyan = new QAction(this); actionTextColor_Magenta = new QAction(this); actionTextColor_DarkMagenta = new QAction(this); actionTextColor_Yellow = new QAction(this); actionTextColor_DarkYellow = new QAction(this); actionTextColor_Gray = new QAction(this); actionTextColor_DarkGray = new QAction(this); actionTextColor_LightGray = new QAction(this); actionTextColor_Other = new QAction(this);
QPixmap pixmap(10, 10);
pixmap.fill(Qt::white); actionTextColor_White->setIcon(pixmap);
pixmap.fill(Qt::black); actionTextColor_Black->setIcon(pixmap);
pixmap.fill(Qt::red); actionTextColor_Red->setIcon(pixmap);
pixmap.fill(Qt::darkRed); actionTextColor_DarkRed->setIcon(pixmap);
pixmap.fill(Qt::green); actionTextColor_Green->setIcon(pixmap);
pixmap.fill(Qt::darkGreen); actionTextColor_DarkGreen->setIcon(pixmap);
pixmap.fill(Qt::blue); actionTextColor_Blue->setIcon(pixmap);
pixmap.fill(Qt::darkBlue); actionTextColor_DarkBlue->setIcon(pixmap);
pixmap.fill(Qt::cyan); actionTextColor_Cyan->setIcon(pixmap);
pixmap.fill(Qt::darkCyan); actionTextColor_DarkCyan->setIcon(pixmap);
pixmap.fill(Qt::magenta); actionTextColor_Magenta->setIcon(pixmap);
pixmap.fill(Qt::darkMagenta); actionTextColor_DarkMagenta->setIcon(pixmap);
pixmap.fill(Qt::yellow); actionTextColor_Yellow->setIcon(pixmap);
pixmap.fill(Qt::darkYellow); actionTextColor_DarkYellow->setIcon(pixmap);
pixmap.fill(Qt::gray); actionTextColor_Gray->setIcon(pixmap);
pixmap.fill(Qt::darkGray); actionTextColor_DarkGray->setIcon(pixmap);
pixmap.fill(Qt::lightGray); actionTextColor_LightGray->setIcon(pixmap);
connect(actionTextColor_White, SIGNAL(triggered()), this, SLOT(white())); connect(actionTextColor_Black, SIGNAL(triggered()), this, SLOT(black())); connect(actionTextColor_Red, SIGNAL(triggered()), this, SLOT(red())); connect(actionTextColor_DarkRed, SIGNAL(triggered()), this, SLOT(darkRed())); connect(actionTextColor_Green, SIGNAL(triggered()), this, SLOT(green())); connect(actionTextColor_DarkGreen, SIGNAL(triggered()), this, SLOT(darkGreen())); connect(actionTextColor_Blue, SIGNAL(triggered()), this, SLOT(blue())); connect(actionTextColor_DarkBlue, SIGNAL(triggered()), this, SLOT(darkBlue())); connect(actionTextColor_Cyan, SIGNAL(triggered()), this, SLOT(cyan())); connect(actionTextColor_DarkCyan, SIGNAL(triggered()), this, SLOT(darkCyan())); connect(actionTextColor_Magenta, SIGNAL(triggered()), this, SLOT(magenta())); connect(actionTextColor_DarkMagenta, SIGNAL(triggered()), this, SLOT(darkMagenta())); connect(actionTextColor_Yellow, SIGNAL(triggered()), this, SLOT(yellow())); connect(actionTextColor_DarkYellow, SIGNAL(triggered()), this, SLOT(darkYellow())); connect(actionTextColor_Gray, SIGNAL(triggered()), this, SLOT(gray())); connect(actionTextColor_DarkGray, SIGNAL(triggered()), this, SLOT(darkGray())); connect(actionTextColor_LightGray, SIGNAL(triggered()), this, SLOT(lightGray())); connect(actionTextColor_Other, SIGNAL(triggered()), this, SLOT(colorDialog()));
popurMenuTextColor = new QMenu(); popurMenuTextColor->addAction(actionTextColor_White); popurMenuTextColor->addAction(actionTextColor_Black); popurMenuTextColor->addAction(actionTextColor_Red); popurMenuTextColor->addAction(actionTextColor_DarkRed); popurMenuTextColor->addAction(actionTextColor_Green); popurMenuTextColor->addAction(actionTextColor_DarkGreen); popurMenuTextColor->addAction(actionTextColor_Blue); popurMenuTextColor->addAction(actionTextColor_DarkBlue); popurMenuTextColor->addAction(actionTextColor_Cyan); popurMenuTextColor->addAction(actionTextColor_DarkCyan); popurMenuTextColor->addAction(actionTextColor_Magenta); popurMenuTextColor->addAction(actionTextColor_DarkMagenta); popurMenuTextColor->addAction(actionTextColor_Yellow); popurMenuTextColor->addAction(actionTextColor_DarkYellow); popurMenuTextColor->addAction(actionTextColor_Gray); popurMenuTextColor->addAction(actionTextColor_DarkGray); popurMenuTextColor->addAction(actionTextColor_LightGray); popurMenuTextColor->addAction(actionTextColor_Other); } void UPushButtonSelectColor::setLanguage() { actionTextColor_White->setText("White")); actionTextColor_Black->setText("Black"); actionTextColor_Red->setText("Red"); actionTextColor_DarkRed->setText("Dark red"); actionTextColor_Green->setText("Green"); actionTextColor_DarkGreen->setText("Dark green"); actionTextColor_Blue->setText("Blue"); actionTextColor_DarkBlue->setText("Dark blue"); actionTextColor_Cyan->setText("Cyan"); actionTextColor_DarkCyan->setText("Dark cyan"); actionTextColor_Magenta->setText("Magenta"); actionTextColor_DarkMagenta->setText("Dark magenta"); actionTextColor_Yellow->setText("Yellow"); actionTextColor_DarkYellow->setText("Dark yellow"); actionTextColor_Gray->setText("Gray"); actionTextColor_DarkGray->setText("Dark gray"); actionTextColor_LightGray->setText("Light gray"); actionTextColor_Other->setText("Other"); }
// PUBLIC SLOTS void UPushButtonSelectColor::black() { color = Qt::black; emit selectedColor(color); } void UPushButtonSelectColor::white() { color = Qt::white; emit selectedColor(color); } void UPushButtonSelectColor::gray() { color = Qt::gray; emit selectedColor(color); } void UPushButtonSelectColor::red() { color = Qt::red; emit selectedColor(color); } void UPushButtonSelectColor::green() { color = Qt::green; emit selectedColor(color); } void UPushButtonSelectColor::cyan() { color = Qt::cyan; emit selectedColor(color); } void UPushButtonSelectColor::blue() { color = Qt::blue; emit selectedColor(color); } void UPushButtonSelectColor::magenta() { color = Qt::magenta; emit selectedColor(color); } void UPushButtonSelectColor::yellow() { color = Qt::yellow; emit selectedColor(color); } void UPushButtonSelectColor::darkGray() { color = Qt::darkGray; emit selectedColor(color); } void UPushButtonSelectColor::darkRed() { color = Qt::darkRed; emit selectedColor(color); } void UPushButtonSelectColor::darkGreen() { color = Qt::darkGreen; emit selectedColor(color); } void UPushButtonSelectColor::darkCyan() { color = Qt::darkCyan; emit selectedColor(color); } void UPushButtonSelectColor::darkBlue() { color = Qt::darkBlue; emit selectedColor(color); } void UPushButtonSelectColor::darkMagenta() { color = Qt::darkMagenta; emit selectedColor(color); } void UPushButtonSelectColor::darkYellow() { color = Qt::darkYellow; emit selectedColor(color); } void UPushButtonSelectColor::lightGray() { color = Qt::lightGray; emit selectedColor(color); } void UPushButtonSelectColor::colorDialog() { QColor col = QColorDialog::getColor(color); if(!col.isValid()) return; color = col;
emit selectedColor(color); } void UPushButtonSelectColor::setColor(QColor c) { color = c; }
// PRIVATE SLOTS void UPushButtonSelectColor::showMenu() { popurMenuTextColor->exec(mapToGlobal(QPoint(frameSize().width(), 0))); }
Код выдрал из проекта, так что не пинать и не жаловаться, если увидели, что то странное, что не должно быть ВНИМАНИЕ!В связи с троллингов ( ) переписал с 0 класс, тот же функционал, только нет диалога выбора цвета h #ifndef UPUSHBUTTONSELECTCOLOR_V2_H #define UPUSHBUTTONSELECTCOLOR_V2_H
#include <QWidget> #include <QPushButton> #include <QAction> #include <QMenu> #include <QSignalMapper> #include <QMap> #include <QMapIterator> #include <QPainter> #include <QDebug>
class UPushButtonSelectColor_v2: public QPushButton { Q_OBJECT public: UPushButtonSelectColor_v2(QWidget *parent = 0);
private: QMenu *menu; QSignalMapper *signalMapper;
private slots: void showMenu(); void clickedAction(int id);
signals: void selectedColor(QColor); };
class foo: public QWidget { Q_OBJECT
private: QColor color;
public slots: void setColor(QColor _color) { color = _color; repaint(); }
protected: void paintEvent(QPaintEvent *) { QPainter painter(this); painter.setBrush(color); painter.setPen(color); painter.drawEllipse(0, 0, width(), height()); } };
#endif // UPUSHBUTTONSELECTCOLOR_V2_H
cpp #include "UPushButtonSelectColor_v2.h"
UPushButtonSelectColor_v2::UPushButtonSelectColor_v2(QWidget *parent): QPushButton(parent) { connect(this, SIGNAL(clicked()), this, SLOT(showMenu()));
menu = new QMenu();
QMap <QString, QColor> map; map.insert("White", Qt::white); map.insert("Black", Qt::black); map.insert("Red", Qt::red); map.insert("Green", Qt::green); map.insert("Yellow", Qt::yellow); map.insert("Blue", QColor(0, 0, 255));
signalMapper = new QSignalMapper(this);
QList <QAction *> actions;
int count = 0; QMapIterator <QString, QColor> i(map); while(i.hasNext()) { i.next();
QColor color = i.value();
QPixmap pixmap(10, 10); pixmap.fill(color);
QAction *action = new QAction(pixmap, i.key(), this); action->setData(color); actions.append(action);
connect(action, SIGNAL(triggered()), signalMapper, SLOT(map()));
signalMapper->setMapping(action, count); count++; }
menu->addActions(actions);
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(clickedAction(int))); }
// PRIVATE SLOTS void UPushButtonSelectColor_v2::showMenu() { menu->exec(mapToGlobal(QPoint(width(), 0))); } void UPushButtonSelectColor_v2::clickedAction(int id) { emit selectedColor(menu->actions().at(id)->data().value <QColor> ()); }
main #include <QApplication> #include "UPushButtonSelectColor_v2.h"
int main(int argc, char *argv[]) { QApplication a(argc, argv);
UPushButtonSelectColor_v2 *p = new UPushButtonSelectColor_v2(); p->show(); p->setText("Click Me!");
foo *f = new foo(); f->setColor(Qt::green); f->show();
QObject::connect(p, SIGNAL(selectedColor(QColor)), f, SLOT(setColor(QColor)));
return a.exec(); }
|
|
|
1657
|
Qt / Пользовательский интерфейс (GUI) / Re: Правильная маскировка кнопок сложной формы.
|
: Ноябрь 11, 2012, 20:20
|
Я как то давно писал игрушку судоку (незакончил правда, надоело ), вот в ней как раз поле рисуется через paintEvent, и присутствует подсчет куда пользователь "тыкнул" мышкой в mouseReleaseEvent, и соответствующее на это действие, маштабирование поля игры тоже идет в рассчет Может вам, Hrundel, это пригодится
|
|
|
1660
|
Qt / Общие вопросы / Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
|
: Ноябрь 08, 2012, 02:29
|
Дайте хоть пинка в нужном направлении этоже как искать микроба в помойной кучи Посмотри как это делают популярные опен-сорсные программы такие как VLC, 7-zip, LibreOffice и т.д. Иконки у меня показываются, вот только на рабочем столе, показывается старая иконка, которая раньше было: после того как выбрал другую, на раб столе иконка не поменялась Но если зайти в папку рабочего стола, то в ней показывается новая, и я спрашивал как с этим непотребством бороться
|
|
|
1662
|
Qt / Общие вопросы / Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
|
: Ноябрь 07, 2012, 22:40
|
Пробовал, после этого отображение иконок стало правильным, от части... на рабочем столе иконка так и показывается старая 1 создаю папку на раб столе, копирую свой файл в эту папку - иконка старая 2 копирую этот файл на диск D - иконка новая 3 открываю папку рабочего стола - иконка новая
Может где то что то на компе надо почистить, чтобы на раб столе правильно показывалось? И почему если я открываю папки с раб.стола, в которых мой формат, то в них иконка старая, если я открою эти папки, но начну с Мой компьютер -> D: -> Document... -> User -> Desktop, то файлы имеют правильное отображение
|
|
|
1664
|
Qt / Общие вопросы / Re: Объясните как программно для ассоциированных файлов установить иконку (Windows)
|
: Ноябрь 07, 2012, 02:32
|
Получилось показать иконку, но опять начались странности Код файла ресурсов rc // иконка ехе IDI_ICON1 ICON DISCARDABLE "images/icon.ico"
// дополнительная иконка, используемая в отображении файлов программы 1 ICON DISCARDABLE "images/iconFileNote.ico"
Код установления иконки: QSettings hkcr("HKEY_CLASSES_ROOT", QSettings::NativeFormat); QString extension = "FileNote"; QString executablePath = QDir::toNativeSeparators(qApp->applicationFilePath()); QString executableName = QFileInfo(executablePath).fileName(); QString nameExe = QFileInfo(executableName).baseName();
hkcr.setValue(QString("/.%1/.").arg(extension), QString("%1.%2") .arg(nameExe) .arg(extension)); hkcr.setValue(QString("/%1.%2/DefaultIcon/.") .arg(nameExe) .arg(extension), '"' + executablePath + '"' + "," + "1);
Результат на скриншотах Иконка на рабочем столе вообще была до новой (в новой есть прозрачность), которая видна везде кроме раб стола, не понимаю, почему старая отображается, ведь и она была взята с ехе, и ее там нет, я проверял Да и иконка, если смотреть через диалоги, видна нормально (видна новая) В общем, единственный вопрос, приходящий в голову: что за нах??! какого??
|
|
|
1665
|
Qt / Общие вопросы / Объясните как программно для ассоциированных файлов установить иконку (Windows)
|
: Ноябрь 05, 2012, 19:52
|
Здравствуйте, уважаемые форумчане! Есть приложение, и есть тип файлов, которое используется приложением, такой тип не является распространенным Связываю такой тип в HKEY_CLASSES_ROOT, указывая тип файла, пусть будет XPEH (уважаемые форумчане, это сочетание цифр было напечатано латиницей! ), тогда получается путь в реестре будет HKEY_CLASSES_ROOT/.XPEH, осталось связать этот тип с чем то Связываю с действием открыть и указываю путь к программе, которая и будет запускаться, когда файл типа .XPEH будет открываться и укажем каким параметром нашей программы будет передаваться абсолютный путь к открываемому файлу HKEY_CLASSES_ROOT/.XPEH/shell/open/command/"С:\prog.exe" "%1", Теперь настройка иконки, она будет лежать в ехе, с которым и ассоциируется файл: HKEY_CLASSES_ROOT/.XPEH/DefaultIcon/С:\prog.exe, 2Но иконки не меняются и не появляются! Когда я мучался, и перезаписывал и создавал разделы в реестре, удавалось (не помню как, реестр то еще "удовольствие", особенно когда ради чистоты проверок, нужно убирать все что добавлял) показать иконки на файлах своего типа, но косячно: на рабочем столе своя иконка показывается, а в корне диска почему то нет, при просмотре файлов через диалоги открытия/сохранения не показывается, и тому подобное Гугление не помолго, нашел пару сайтов, в которых кратко описана структура реестра виндовс, несколько сайтов делфи, в которых показывалось как с действием Открыть связать программу, и кучу сайтов, в которых популярным языком объясняется как с помощью одной мышки ассоциацию сделать (правый клик->открыть с помощью, и подобное) Объясните/покажите, как в реестре настроить показ иконки файла
|
|
|
|
|