Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: LinuxFanUNIX в Mar 23, 2009, 15:01



Титла: Заместител на QFileDialog::getOpenFileName в Qt4
Публикувано от: LinuxFanUNIX в Mar 23, 2009, 15:01
Добър ден.

Опитвам се да създам Qt4 програма която съдържа файлов диалог и при избиране на файл - неговото име и местоположение се записва в стринг с име като textFile.

Опитах с
Код
GeSHi (C++):
  1. String textFile = QFileDialog::getOpenFileName(this, tr("Open file"), "/", tr("*.txt"));

Обаче тук идва проблема - кликайки на бутона за отваряне - се сменя целия стил на програмата и при нейното изпълнение на KDE 3.5.10 - като се натисне този бутон който води към горепосочения код - променя стила на програмата от нормалния за KDE 3.5.10 на KDE 4 което е малко не добре.

Опитах със setFilters и след това show като преди това се опитвам това да присвоя на променливата textFile се получава int вход, вместо да идва очакваният String...

Бихте ли ми дали заместител на QFileDialog::getOpenFileName...?

Благодаря предварително!


Титла: Re: Заместител на QFileDialog::getOpenFileName в Qt4
Публикувано от: kolio_kolev в Mar 23, 2009, 15:58
Съветвам те, да ползват стандартните за Qt4 стилове (виж QStyle ($2)), защото тях ще ги има на всяка машина.
Разгледай:
void QApplication::setPalette ( const QPalette & palette, const char * className = 0 )   [static]
void QApplication::setStyle ( QStyle * style )   [static]

Друг вариант е ти самият да си създадеш собствен стил (това не е много трудно) и той да е част от твоето приложение.


Ако искаш да управляваш на локалната машина инсталираните стилове достъпни за QT (това не означава, че ще ги има тези стилове на всички машини), то ползвай qtconfig ($2). Инструмента създава в домашната директория на потребителя настройка за избрания стил измежду достъпните на тази машина.


Титла: Re: Заместител на QFileDialog::getOpenFileName в Qt4
Публикувано от: LinuxFanUNIX в Mar 23, 2009, 19:55
Така. Четох някъде 2 часа документацията на QStyle - научих доста обаче не и за проблема ми.

Програмата която съм написал е съвсем обикновена - просто присвоява стринга. Не съм включвал никакви допълнения но просто не зная как да оправя този бъг - пускам програмата - стил KDE 3, обаче натисна ли бутона за пускане на диалога - веднага се сменя на KDE 4. Искам обаче да отбележа че не съм използвал никакви допълнителни библиотеки.

Ето и какво съдържа програмата:
Код
GeSHi (C++):
  1. #include <QApplication>
  2. #include <QFileDialog>
  3. #include <QPushButton>
  4. #include "mainwindow.h"
От тук се вижда че е доста simple, и че няма особености обаче защо така се получава - и как да го оправя и с какво мога да заменя че да си продължи програмата да използва KDE 3, а не да използва гадния шрифт и като цяло стил на KDE 4...?