crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику novichkov ::: Спасибо сказали: 6 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
7.12.2011, 14:31 двойной клик на tabWidget
А у меня переопределен mouseDoubleClickEvent:

class TabBar : public QTabBar
{
    Q_OBJECT
signals:
    void doubleClicked(int);
public:
    TabBar(QWidget *parent = 0);
protected:
    void mouseDoubleClickEvent(QMouseEvent * event) {
        int pos=tabAt(event->pos());
        if (event->button()==Qt::LeftButton && pos!=-1)
            emit doubleClicked(pos);
    }
};

class TabWidget : public QTabWidget
{
    Q_OBJECT
public:
    explicit TabWidget(QWidget *parent = 0): QTabWidget(parent)
    , m_tabBar(new TabBar(this))
{//Trace trace(Q_FUNC_INFO);
    connect(m_tabBar, SIGNAL(doubleClicked(int)), this, SIGNAL(newTab(int)));
    setTabBar(m_tabBar);
}
signals:
    void newTab(int);
private:
    TabBar *m_tabBar;
};


B_u_R_n,
2.12.2011, 21:16 Как временно изменить цвет текста и фона в QSpinBox и QTimeEdit ?
А стилями?
ui->spinBox->setStyleSheet("QSpinBox { background: yellow; color: red }");
ui->lineEdit->setStyleSheet("QLineEdit { background: yellow; color: red }");


или конкретно экземпляры класса:
ui->spinBox->setStyleSheet("QSpinBox#spinBox1 { background: yellow; color: red }");
ui->lineEdit->setStyleSheet("QLineEdit#lineEdit { background: yellow; color: red }");
Steklova Olga,
24.7.2011, 18:04 QTableWidget фильтр размера колонки
У QHeaderView есть сигнал
void    sectionResized ( int logicalIndex, int oldSize, int newSize )

Проще всего с помощью него.
fortero,
24.4.2011, 15:44 Не понятный #define
Если в классе часто нужно гонять строки из TagLib в Qt и обратно, логично использовать функции-конструкторы QString::fromStdWString(s.toWString()) и TagLib::String(s.toStdWString()). А так как они везде пишутся совершенно одинаково - заменяем их соответствующим коротким макросом-синонимом.
RazrFalcon,
16.4.2011, 15:55 как добавить свои пункты в существующее контекстное меню меню?
Надо перехватить создание события "вызов контекстного меню", явно создать контекстное меню, а затем добавить в него нужные пункты.
Я делал это для QLineEdit:

class LineEdit : public QLineEdit
{
    Q_OBJECT
public:
    LineEdit(QWidget *parent = 0);
protected:
    void contextMenuEvent(QContextMenuEvent *);
private slots:
    void actionTriggered();
private:
    QList<QAction *> acts;
 // это только для динамического перевода, можно и не запоминать
};


LineEdit::LineEdit(QWidget *parent)
    : QLineEdit(parent),
{
    //создаем свои действия и заосим их в список
        QAction *a=new QAction(tr("..."),this);
        connect(a,SIGNAL(triggered()),SLOT(actionTriggered()));
        acts << a;

//и так далее
    }
}

void LineEdit::actionTriggered()
{
    QAction *a = qobject_cast<QAction *>(sender());
    if (!a) return;
    //дальше нужные действия
}

void LineEdit::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = createStandardContextMenu();
    menu->insertSeparator(menu->actions().at(0));
//если надо добавить действия в отдельное выпадающее меню
    QMenu *setAsMenu = new QMenu(tr("Set into..."),menu);
    setAsMenu->addActions(acts);
    menu->insertMenu(menu->actions().at(0),setAsMenu);
//или прямо:  menu->addActions(acts);

    menu->exec(event->globalPos());
    delete menu;
}
dimamix,
29.3.2010, 21:32 Linux, Qt, deb-пакеты
1. В файле rules в секции build-stamp не прописывать команду qmake, а до генерации нужных файлов командой dh_make самому сделать qmake *.pro (если используешь cmake, то все проще).
2. В том же файле в секции install вручную прописываешь, какие файлы и куда копировать при установке пакета. Примерно так:

        mkdir -p '$(CURDIR)/debian/qoobar/usr/bin'
    cp -f -- bin/qoobar '$(CURDIR)/debian/qoobar/usr/bin'
    mkdir -p '$(CURDIR)/debian/qoobar/usr/share/applications'
    cp qoobar.desktop '$(CURDIR)/debian/qoobar/usr/share/applications'
    mkdir -p '$(CURDIR)/debian/qoobar/usr/share/icons/hicolor/48x48/apps'
    cp src/icons/qoobar.png '$(CURDIR)/debian/qoobar/usr/share/icons/hicolor/48x48/apps/qoobar.png'

Здесь путь $(CURDIR)/debian/qoobar/ текущей папки, в которой производится сборка пакета, будет в конечном итоге в самом пакете заменен на /

3. Указав, какие файлы куда пойдут, можно оздать .desktop файл:

[Desktop Entry]
Type=Application
Icon=qoobar
Exec=qoobar
Comment=Qoobar - tagger for classical music
Name=Qoobar
Categories=Audio;Qt;AudioVideo;
Name[ru_RU]=qoobar
Comment[ru_RU.UTF-8]=Qoobar - редактор тегов для классической музыки


Icon -это название файла рисунка без расширения, который должен храниться в /usr/share/icons/hicolor/48x48/apps
Exec - команда на выполнение программы.

Еще. Думаю, при создании пакета нет смысла копировать файлы пакета в /usr/local - как, по правилам, должно быть в секции install файла project.pro. Именно поэтому я методом проб и ошибок пришел к явному копироанию файлов в файле rules. Существует способ при создании makefile задать переменную DESTDIR, но как это сделать для qmake, я не знаю.

Прилагаю архив с нужными для создания пакета файлами - это control и rules для моего собственного проекта qoobar.

И еще. Не знаю насчет папки /usr/share/pixmaps, но собранный мною пакет прекрасно устанавливается и в меню gnome в разделе Аудио и видео видна иконка моей программы.
breeve,

RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 14.4.2025, 3:54